package com.haoze.nurse.dao;

import com.haoze.nurse.dto.Element;
import com.haoze.nurse.dto.NursePatientMsgDTO;
import com.haoze.nurse.model.EmrTemplateDetailEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface NurseFileMapper {

    /**
     * 根据数据元id获取数据元
     *
     * @param elementId
     * @return
     */
    Element queryElementById(@Param("elementId") String elementId);

    Element queryElementByName(@Param("elementName") String elementName, @Param("dataValue") String dataValue);

    /**
     * 通过varCode获取模板编号
     *
     * @param varCode
     * @return
     */
    String queryTplIdByVarCode(@Param("varCode") String varCode);


    /**
     * 根据模板编号获取模板详情
     *
     * @param tplId
     * @return
     */
    List<EmrTemplateDetailEntity> queryTplDetailByTplId(@Param("tplId") String tplId);

    /**
     * 根据值获取varCode
     *
     * @param elementId
     * @return
     */
    String queryVarCodeByVarValue(@Param("elementId") String elementId);


    /**
     * 给数据元绑定varCode
     *
     * @param varCode
     * @param varName
     * @param elementId
     * @return
     */
    int bondElementWithVarCode(@Param("varCode") String varCode,
                               @Param("varName") String varName,
                               @Param("elementId") String elementId);

    /**
     * 根据数据元名称获取数据元id
     *
     * @param elementName
     * @return
     */
    String queryElementIdByElementName(@Param("elementName") String elementName);

    /**
     * 根据varCode获取数据元名称
     *
     * @param varCode
     * @return
     */
    String queryElementNameByVarCode(@Param("varCode") String varCode);

    /**
     * 获取病人信息
     *
     * @param inpatNum
     * @return
     */
    NursePatientMsgDTO queryPatientMsg(@Param("inpatNum") String inpatNum);

    /**
     * 查询当前用户
     *
     * @param userId
     * @return
     */
    Map<String, String> getUser(@Param("userId") String userId);

    /**
     * 根据varCode获取数据元id
     *
     * @param varCode
     * @return
     */
    String querySysElementId(@Param("varCode") String varCode);

    /**
     * 获取用户信息
     *
     * @param loginName
     * @return
     */
    Map<String, String> getSysUser(@Param("loginName") String loginName);

    /**
     * 根据tplDetailId获取模板节点详情
     *
     * @param tplDetailId
     * @return
     */
    List<EmrTemplateDetailEntity> queryTplDetailByTplDetailId(@Param("tplDetailId") String tplDetailId);


    List<Map<String, String>> querySelectedOptionsByVarCode(@Param("varCode") String varCode);

    List<Map<String, String>> queryOtherPipe();

    List<Map<String, String>> queryOtherAssess();

    List<Map<String, String>> queryOtherRealize();

    /**
     * 意识名称
     *
     * @return
     */
    List<Map<String, String>> queryConsciousElementSelections();

    /**
     * 出量导管
     *
     * @return
     */
    List<Map<String, String>> queryOutputElementSelections();

    /**
     * 补液
     *
     * @return
     */
    List<Map<String, String>> queryAllBLElementSelections();

    /**
     * 护理评估名称
     *
     * @return
     */
    List<Map<String, String>> queryEstimateElementSelections();


    /**
     * 根据住院号和记录类型获取病人绑定的扩展内容
     *
     * @return
     */
    String queryExtends(@Param("fileIndexId") String fileIndexId);

    /**
     * 根据住院号和记录类型获取扩展内容
     *
     * @param inpatNum
     * @param recordType
     * @return
     */
    String queryExtendsByInpatNum(@Param("inpatNum") String inpatNum,
                                  @Param("recordType") String recordType);

    /**
     * 查询某名称是否包含在血制品类型数据集下的数据元中，并返回该数据元的名称
     *
     * @param name
     * @return
     */
    Map<String, String> queryBloodDatasetByName(@Param("name") String name);

    /**
     * 根据varCode获取varValue
     *
     * @param varCode
     * @return
     */
    String queryVarValueByVarCode(@Param("varCode") String varCode);

    /**
     * 更新文书主表扩展字段
     *
     * @param remark
     * @param fileIndexId
     * @return
     */
    Integer updateCustomizeExpand(
            @Param("remark") String remark,
            @Param("fileIndexId") String fileIndexId);

    /**
     * 根据编号获取科室/病区名称
     *
     * @param deptId
     * @return
     */
    String queryDeptNameById(@Param("deptId") String deptId);

    /**
     * 根据传入的名称查询血制品包含子集
     *
     * @param elementName
     * @return
     */
    List<Map<String, String>> queryBloodsByElementName(@Param("elementName") String elementName);

    String getLatestBedNo(String inpatNum);

    /**
     * 获取特殊用法的替换字符
     *
     * @param srcUsage
     * @return
     */
    String querySpecialUsage(@Param("srcUsage") String srcUsage);

    List queryFluids();

    /**
     * 根据varCode获取字典值
     *
     * @return
     */
    List<Map<String, String>> queryCommonDictionryValues(@Param("varCode") String varCode);

    List<Element> getMedicalList(@Param("medicalId") String medicalId, @Param("dataRelationIds") String dataRelationIds, @Param("numberValue") String numberValue);

    List<Map<String, String>> getSelectedOptions(@Param("elementId") String elementId, @Param("dataCode") String dataCode);

    List<Element> getMedicalChildren(@Param("medicalId") String medicalId, @Param("tplId") String tplId, @Param("effectiveElementId") String effectiveElementId);

    String getTplNameByTplId(@Param("tplId") String tplId);

    /**
     * 获取数据集内数据元值域
     *
     * @return
     */
    List<Map<String, String>> queryDataSetElementValueByName(@Param("name") String name, @Param("word") String word,@Param("dataCode") String dataCode);


    List<Map<String, String>> getModifyLocation(@Param("tplId") String tplId,@Param("modifyLocation")String modifyLocation);

    String queryTplDataValueContentName(@Param("tplDetailId") String tplDetailId,
                                        @Param("name") String name);

    Map<String, String> queryOwnTemplate(@Param("basicValueId") String basicValueId);

    List<Element> getNumberElementsWithHeight(@Param("deptId") String deptId, @Param("num") String num);

    List<Element> queryElements(@Param("deptId") String deptId, @Param("isPinyin") boolean isPinyin, @Param("likeTerm") String likeTerm, @Param("word") String word, @Param("userId") String userId);

    List<Map<String, String>> queryComposeSelections(@Param("dictId") String dictId, @Param("likeTerm") String likeTerm, @Param("word") String word, @Param("isPinyin") boolean isPinyin, @Param("dataCode") String dataCode, @Param("page") int page, @Param("pageSize") int pageSize);

}
